#include <stdlib.h>
#include "user_mgr_page.h"
#include "user_add_dialog.h"
#include "user_del_dialog.h"
#include "user_pwd_dialog.h"

user_mgr_page_t* g_user_mgr_page = NULL;

// 前向声明
static void user_mgr_page_close_handler(void *page);
static void refresh_user_table(user_mgr_page_t* page);
static void btn_add_event_cb(lv_event_t* e);
static void btn_del_event_cb(lv_event_t* e);
static void btn_pwd_event_cb(lv_event_t* e);

lv_obj_t* user_mgr_page_create(lv_obj_t* parent, close_cb_t close_cb) {
    // 分配内存
    user_mgr_page_t* page = (user_mgr_page_t*)lv_mem_alloc(sizeof(user_mgr_page_t));
    if (page == NULL) {
        return NULL;
    }
    lv_memset(page, 0, sizeof(user_mgr_page_t));

    g_user_mgr_page = page;

    page->obj = lv_obj_create(parent);
    lv_obj_set_size(page->obj, LV_PCT(100), LV_PCT(100));
    lv_obj_set_style_border_width(page->obj, 0, 0);
    lv_obj_set_style_pad_all(page->obj, 0, 0);

    page->parent = parent;
    page->close_cb = close_cb;

    // 创建标题栏
    page->titlebar = titlebar_create(page->obj);
    if (page->titlebar == NULL) {
        free(page);
        return NULL;
    }
    titlebar_set_title(page->titlebar, "User Management");
    titlebar_set_close_cb(page->titlebar, user_mgr_page_close_handler, page);

    // 创建主容器
    page->container = lv_obj_create(page->obj);
    lv_obj_set_size(page->container, LV_PCT(100), LV_PCT(80));
    lv_obj_align(page->container, LV_ALIGN_TOP_MID, 0, 40);
    lv_obj_set_style_pad_all(page->container, 5, 0);
    lv_obj_set_style_border_width(page->container, 0, 0);

    // 创建用户列表表格
    page->table = lv_table_create(page->container);
    lv_obj_set_size(page->table, 450, 160);
    lv_table_set_col_cnt(page->table, 4);
    lv_table_set_col_width(page->table, 0, 50);  // ID
    lv_table_set_col_width(page->table, 1, 110); // 用户名
    lv_table_set_col_width(page->table, 2, 180); // 创建时间
    lv_table_set_col_width(page->table, 3, 90); // 用户类型

    // 设置表头
    lv_table_set_cell_value(page->table, 0, 0, "ID");
    lv_table_set_cell_value(page->table, 0, 1, "Username");
    lv_table_set_cell_value(page->table, 0, 2, "Create Time");
    lv_table_set_cell_value(page->table, 0, 3, "Type");

    // 创建按钮容器
    lv_obj_t* btn_container = lv_obj_create(page->container);
    lv_obj_set_size(btn_container, 420, 40);
    lv_obj_align(btn_container, LV_ALIGN_BOTTOM_MID, 0, 0);
    //lv_obj_set_flex_flow(btn_container, LV_FLEX_FLOW_ROW);
    lv_obj_set_flex_align(btn_container, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
    lv_obj_set_style_pad_all(btn_container, 0, 0);
    lv_obj_set_style_border_width(btn_container, 0, 0);

    // 创建按钮
    page->btn_add = lv_btn_create(btn_container);
    lv_obj_set_size(page->btn_add, 120, 40);
    lv_obj_add_event_cb(page->btn_add, btn_add_event_cb, LV_EVENT_CLICKED, page);
    lv_obj_t* label_add = lv_label_create(page->btn_add);
    lv_label_set_text(label_add, "Add User");
    lv_obj_center(label_add);

    page->btn_del = lv_btn_create(btn_container);
    lv_obj_set_size(page->btn_del, 120, 40);
    lv_obj_add_event_cb(page->btn_del, btn_del_event_cb, LV_EVENT_CLICKED, page);
    lv_obj_t* label_del = lv_label_create(page->btn_del);
    lv_label_set_text(label_del, "Delete User");
    lv_obj_center(label_del);

    page->btn_pwd = lv_btn_create(btn_container);
    lv_obj_set_size(page->btn_pwd, 120, 40);
    lv_obj_add_event_cb(page->btn_pwd, btn_pwd_event_cb, LV_EVENT_CLICKED, page);
    lv_obj_t* label_pwd = lv_label_create(page->btn_pwd);
    lv_label_set_text(label_pwd, "Change PWD");
    lv_obj_center(label_pwd);

    // 根据用户权限设置按钮状态
    int user_type;
    if (sysmgr_get_user_type(&user_type) == 0 && user_type != USER_TYPE_ADMIN) {
        // 如果是普通用户，禁用添加和删除按钮
        lv_obj_add_state(page->btn_add, LV_STATE_DISABLED);
        lv_obj_clear_flag(page->btn_add, LV_OBJ_FLAG_CLICKABLE);
        lv_obj_add_state(page->btn_del, LV_STATE_DISABLED);
        lv_obj_clear_flag(page->btn_del, LV_OBJ_FLAG_CLICKABLE);
    }

    // 刷新用户列表
    refresh_user_table(page);

    return page->obj;
}

// 关闭页面处理函数
static void user_mgr_page_close_handler(void* page) {
    user_mgr_page_t* user_mgr_page = (user_mgr_page_t*)page;
    if (user_mgr_page && user_mgr_page->close_cb) {
        user_mgr_page->close_cb();
    }
}

// 刷新用户列表
static void refresh_user_table(user_mgr_page_t* page) {
    if (!page || !page->table) return;

    UserInfo* users = NULL;
    int count = 0;
    if (usermgr_get_all_users(&users, &count) == 0) {
        // 清空表格内容（保留表头）
        int row = 1;
        int col = 0;
        for (row = 1; row < lv_table_get_row_cnt(page->table); row++) {
            for (col = 0; col < 4; col++) {
                lv_table_set_cell_value(page->table, row, col, "");
            }
        }

        // 设置表格行数
        lv_table_set_row_cnt(page->table, count + 1);

        // 填充用户数据
        char buf[32];
        int i = 0;
        for (i = 0; i < count; i++) {
            // ID
            snprintf(buf, sizeof(buf), "%d", users[i].id);
            lv_table_set_cell_value(page->table, i + 1, 0, buf);
            
            // 用户名
            lv_table_set_cell_value(page->table, i + 1, 1, users[i].username);
            
            // 创建时间
            lv_table_set_cell_value(page->table, i + 1, 2, users[i].create_time);
            
            // 用户类型
            const char* type_str = users[i].user_type == USER_TYPE_ADMIN ? "Admin" : "Normal";
            lv_table_set_cell_value(page->table, i + 1, 3, type_str);
        }

        usermgr_free_user_list(users);
    }
}

// 刷新用户表格的适配器函数
static void refresh_user_table_adapter(void) {
    if (g_user_mgr_page) {
        refresh_user_table(g_user_mgr_page);
    }
}

// 添加用户按钮事件回调
static void btn_add_event_cb(lv_event_t* e) {
    user_mgr_page_t* page = (user_mgr_page_t*)lv_event_get_user_data(e);
    if (!page) return;

    user_add_dialog_create(page->obj, refresh_user_table_adapter);
}

// 删除用户按钮事件回调
static void btn_del_event_cb(lv_event_t* e) {
    user_mgr_page_t* page = (user_mgr_page_t*)lv_event_get_user_data(e);
    if (!page) return;

    user_del_dialog_create(page->obj, refresh_user_table_adapter);
}

// 修改密码按钮事件回调
static void btn_pwd_event_cb(lv_event_t* e) {
    user_mgr_page_t* page = (user_mgr_page_t*)lv_event_get_user_data(e);
    if (!page) return;

    user_pwd_dialog_create(page->obj, refresh_user_table_adapter);
}